package com.endbd.purchase.purchase_order.dao;

import com.endbd.feignapi.model.purchase.*;
import com.endbd.feignapi.model.system.Job;
import com.endbd.feignapi.model.system.User;
import com.endbd.feignapi.model.warehouse.RkWarehouse;
import com.endbd.purchase.purchase_order.model.OtherPurchaseCondition;
import com.endbd.purchase.purchase_order.model.PurchaseData;
import com.endbd.purchase.purchase_order.model.PurchaseOrderCondition;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Auther:Lang
 * @Date:2022-11-18
 * @Time:9:15
 * @Description:采购单dao层接口
 */
@Mapper
@Repository
public interface PurchaseDao {
    /**
     * 根据登录人的权限来判断是查询部分还是全部通过条件查询符合的数据
     * 条件有采购单编号、采购时间范围、金额范围、审核状态、操作人的id(createId)
     *
     * @param conn 查询条件
     * @return
     */
    List<CPurchase> queryPurchasePageByCondition(PurchaseOrderCondition conn);

    /**
     * 根据采购单的编号进行查询 采购单编号、采购时间、审核状态、审核意见、操作人
     * 金额、数量、进价、品牌、商品类型、型号厂商名称
     *
     * @param pid 采购单编号
     * @return
     */
    List<PurchaseData> queryPurchaseDetailById(String pid);



    /**
     * 审核采购单，只需更改审核意见、审核状态、审核人的id
     *
     * @param conn
     */
    int auditPurchaseById(PurchaseOrderCondition conn);


    /**
     * 根据部门id查找对应的职位
     * @param deptId 部门id
     * @return
     */
    List<Job> queryJobByDeptId(Integer deptId);

    /**
     * 根据职位查询职员
     * @param jobId
     * @return
     */
    List<User> queryStaffByJobId(Integer jobId);

    /**
     * 给采购单添加审核人
     * @param purchaseId
     * @param uid
     * @return
     */
    int addAuditById(String purchaseId,Integer uid);

    /**
     * 删除采购单
     * @param purchaseId
     * @return
     */
    int delPurchaseById(String purchaseId);

    /**
     *  添加采购单信息
     * @param purchase
     * @return
     */
    int addPurchaseOrder(CPurchase purchase);

    /**
     * 添加商品明细
     * @param details
     * @return
     */
    int addPurchaseDetail(@Param("details") List<CDetails> details);


    /**
     * 根据品牌id查找品牌名称，类型id
     *
     * @param opc
     * @return
     */
    List<CBrand> queryBrandByBrandId(OtherPurchaseCondition opc);

    /**
     * 根据类型id/品牌id 获取类型名称、品牌id
     *
     * @param opc
     * @return
     */
    List<CType> queryTypeByBrandId(OtherPurchaseCondition opc);

    /**
     * 根据类型id/商品型号获取商品 商品类型id、商品型号、厂商id、商品单位、商品单价
     *
     * @param opc
     * @return
     */
    List<CProduct> queryProductOrFirmIdByTypeId(OtherPurchaseCondition opc);

    /**
     * 根据firmId查询firmName
     * @param firmIds
     * @return
     */
    List<CFirm> queryFirmByFirmId(@Param("fid") Integer[] firmIds);

    /**
     * 根据采购单和商品id删除采购单明细
     * @param purchaseId
     * @return
     */
    int delDetailByPurchaseIdAndProductId(String purchaseId);

    /**
     * 根据采购单编号修改仓库id和入库状态
     * @param poc
     * @return
     */
    int updateWarehouseIdAndRkStatus(PurchaseOrderCondition poc);
}
